/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

import exception.AccessErrorException;
import exception.NoDataException;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * Classe qui étends la classe abstraite AbstractTableModel.
 * Elle gère le modèle de la JTable affichant le palmarès
 * @author Florian MININ & Khémon BEH
 */
public class TableModelPalmares extends AbstractTableModel {


    protected String[] nomsColonnes;
    protected List<EnregistrementScore> donnees;

    public TableModelPalmares(List<EnregistrementScore> listScore){
        donnees = listScore;
    }
    public TableModelPalmares(String[] _nomColonnes) throws NoDataException, AccessErrorException {
        nomsColonnes = _nomColonnes;
        donnees = initialiseDonnees();
    }

    public List<EnregistrementScore> initialiseDonnees() throws NoDataException, AccessErrorException{
        PalmaresBDD palmares = new PalmaresBDD();
        palmares.initialiser();
        return palmares.getListEnregistrement();
    }
    public int getRowCount() {
        return donnees.size();
    }

    public int getColumnCount() {
        return nomsColonnes.length;
    }

    public EnregistrementScore getObjetSelectionne(int row) {
        return donnees.get(row);
    }

    public void maj(List<EnregistrementScore> l) {
        donnees = l;
        fireTableDataChanged();
    }

    public void supprimeLigne(int selectedRow) {
        donnees.remove(selectedRow);
        fireTableDataChanged();
    }

    @Override
    public String getColumnName(int col) {
        return nomsColonnes[col];
    }

    public Object getValueAt(int row, int col) {
        EnregistrementScore enr = donnees.get(row);
        switch (col) {
            case 0:
                return row+1;
            case 1:
                return enr.getNomJoueur();
            default:
                return enr.getScore();
        }
    }

    public void setNomsColonnes(String[] _nomsColonnes) {
        nomsColonnes = _nomsColonnes;
    }

    public void ajouterEnregistrement(EnregistrementScore enr){
        donnees.add(enr);
        maj(donnees);
    }

    public void retirerEnregistrement(EnregistrementScore enr) {
        donnees.remove(enr);
        maj(donnees);
    }

    public boolean enregistrementExiste(EnregistrementScore enr) {
        return donnees.contains(enr);
    }

}
